<?php

namespace longhu\library\redis;

trait ZetTrait
{
    /**
     * zAdd 给当前集合添加一个元素
     * 如果value已经存在，会更新order的值。
     * @param RString $key
     * @param RString $order 序号
     * @param RString $value 值
     * @return bool
     */
    public function zAdd($key, $order, $value)
    {
        return $this->redis->zAdd($key, $order, $value);
    }

    /**
     * zincrby 给$value成员的order值，增加$num,可以为负数
     * @param RString $key
     * @param RString $num 序号
     * @param RString $value 值
     * @return mixed 返回新的order
     */
    public function zincrby($key, $num, $value)
    {
        return $this->redis->zincrby($key, $num, $value);
    }

    /**
     * zRem 删除值为value的元素
     * @param RString $key
     * @param RString $value
     * @return bool
     */
    public function zRem($key, $value)
    {
        return $this->redis->zRem($key, $value);
    }

    /**
     * zRange 集合以order递增排列后，0表示第一个元素，-1表示最后一个元素
     * @param RString $key
     * @param int $start
     * @param int $end
     * @return mixed array|bool
     */
    public function zRange($key, $start, $end)
    {
        return $this->redis->zRange($key, $start, $end);
    }

    /**
     * zRevRange 集合以order递减排列后，0表示第一个元素，-1表示最后一个元素
     * @param RString $key
     * @param int $start
     * @param int $end
     * @return array|bool
     */
    public function zRevRange($key, $start, $end)
    {
        return $this->redis->zRevRange($key, $start, $end);
    }

    /**
     * 集合以order递增排列后，返回指定order之间的元素。
     * min和max可以是-inf和+inf　表示最大值，最小值
     * @param RString $key
     * @param int $start '-inf'
     * @param int $end "+inf"
     * @param array $option 参数 package
     *     withscores=>true，表示数组下标为Order值，默认返回索引数组
     *     limit=>array(0,1) 表示从0开始，取一条记录。
     * @return array|bool
     */
    public function zRangeByScore($key, $start = 0, $end = 0, $option = [])
    {
        return $this->redis->zRangeByScore($key, $start, $end, $option);
    }

    /**
     * 集合以order递减排列后，返回指定order之间的元素。
     * min和max可以是-inf和+inf　表示最大值，最小值
     * @param RString $key
     * @param int $start '-inf'
     * @param int $end "+inf"
     * @param array $option 参数 package
     *     withscores=>true，表示数组下标为Order值，默认返回索引数组
     *     limit=>array(0,1) 表示从0开始，取一条记录。
     * @return array|bool
     */
    public function zRevRangeByScore($key, $start = 0, $end = 0, $option = [])
    {
        return $this->redis->zRevRangeByScore($key,$start,$end,$option);
    }

    /**
     * zCount 返回order值在start end之间的数量
     * @param $key
     * @param $start
     * @param $end
     * @return mixed
     */
    public function zCount($key, $start, $end)
    {
        return $this->redis->zCount($key, $start, $end);
    }

    /**
     * zScore 返回值为value的order值
     * @param $key
     * @param $value
     * @return mixed
     */
    public function zScore($key, $value)
    {
        return $this->redis->zScore($key, $value);
    }

    /**
     * zRank 返回集合以score递增加排序后，指定成员的排序号，从0开始。
     * @param $key
     * @param $value
     * @return mixed
     */
    public function zRank($key,$value)
    {
        return $this->redis->zRank($key,$value);
    }

    /**
     * zRevRank 返回集合以score递增加排序后，指定成员的排序号，从0开始。
     * @param $key
     * @param $value
     * @return mixed
     */
    public function zRevRank($key,$value)
    {
        return $this->redis->zRevRank($key,$value);
    }

    /**
     * zRemRangeByScore 删除集合中，score值在start end之间的元素　包括start end
     * min和max可以是-inf和+inf　表示最大值，最小值
     * @param $key
     * @param $start
     * @param $end
     * @return mixed 删除成员的数量
     */
    public function zRemRangeByScore($key,$start,$end)
    {
        return $this->redis->zRemRangeByScore($key,$start,$end);
    }

    /**
     * zCard 返回集合元素个数
     * @param $key
     * @return mixed
     */
    public function zCard($key)
    {
        return $this->redis->zCard($key);
    }

}